
import pandas as pd
import efinance as ef
import numpy as np


import pandas as pd

def calculate_macd_tonghuashun(df, fast_period=12, slow_period=26, signal_period=9):
    """
    符合同花顺标准的MACD计算（自动处理日期顺序）
    
    参数:
    df - 包含'日期'和'收盘'列的DataFrame
    fast_period - 快速EMA周期（默认12）
    slow_period - 慢速EMA周期（默认26）
    signal_period - 信号线周期（默认9）
    """
    # 确保按日期升序排列
    df = df.sort_values('日期', ascending=True).copy()
    df.reset_index(drop=True, inplace=True)
    
    # 计算快速EMA
    df['EMA_fast'] = df['收盘'].ewm(span=fast_period, adjust=False, min_periods=0).mean()
    
    # 计算慢速EMA
    df['EMA_slow'] = df['收盘'].ewm(span=slow_period, adjust=False, min_periods=0).mean()
    
    # 计算DIF
    df['DIF'] = df['EMA_fast'] - df['EMA_slow']
    
    # 计算DEA
    df['DEA'] = df['DIF'].ewm(span=signal_period, adjust=False, min_periods=0).mean()
    
    # 计算MACD柱
    df['MACD'] = 2 * (df['DIF'] - df['DEA'])
    
    # 清理临时列
    df.drop(['EMA_fast', 'EMA_slow'], axis=1, inplace=True)
    
    return df



# 修改主函数
if __name__ == '__main__':
   df = pd.DataFrame({
    '日期': ['2025-06-05', '2025-06-04', '2025-06-03', '2025-06-06'],
    '收盘': [15.2, 15.0, 14.8, 15.5]
})

print("原始数据（乱序）:")
print(df)

# 计算MACD（函数内部会自动排序）
df_macd = calculate_macd_tonghuashun(df)

print("\n计算后的数据（已按日期升序排列）:")
print(df_macd[['日期', '收盘', 'DIF', 'DEA', 'MACD']])